#ifndef LEGAMI_H
#define LEGAMI_H

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QVector>
#include "username.h"
#include "user.h"
#include "profilo.h"
#include "businessaccount.h"
#include "executiveaccount.h"
#include "info.h"
#include "gruppo.h"
#include "contatto.h"

class logic_error {};
class database_error {};
class wrongdatabase_error{};

class Legami{
private:
    QSqlDatabase* db;
    QVector<Account*> utenti; // il database di Account
    QVector<Gruppo*> gruppi;  //il database di Gruppo
    static QString username;
    static QString pwd;

public:
    Legami(QSqlDatabase* db);
    ~Legami();
    static QString getU();
    static QString getP();
    // gestione utenti, cambio profilo
    Account* upgradeB(Account*,Username*,Profilo*,Contatto*);
    Account* upgradeE(Account*,Username*,Profilo*,Contatto*);
    void updateAll(Account*,Account*,Contatto*);
    //Altri metodi-----
    QVector<Account*> getUtenti() const;
    QVector<Gruppo*> getGruppi() const;
    Account* getAcc(User*); //mettere const
    void add(Account*);
    void addgruppo(Gruppo*);
    void elimina(Account*);
    bool deletegruppo(Gruppo*);
    bool checkgroup(QString);   //controllo che non ci sia gia' un gruppo con id dato, mettere const
    void fillUsers();
    void fillGroups();
    bool foundusername(QString);    //controllo che username/nick sia disponibile all'uso   |mettere const?
    bool foundgruppo(Gruppo*) throw(logic_error);//                                         |
    bool foundacc(User*) throw(logic_error);                                              //|
    Account* verify(QString, QString);  //questo ci serve per tabUser,dove abbiamo bisogno di un current da subito! const
    bool aut(QString, QString);         //per TabAmm, dove non serve un Account* subito,anzi. const
    QVector<Account*>* searchU(int, QString, QString, QString);                           //|
    QVector<Gruppo*>* searchG(int, QString, QString, QString);                            //|
    void clear();
};

#endif // LEGAMI_H
